NumPy数组在数据分析中存在三个关键限制:
Pandas通过 Series 和 DataFrame 完美解决了这些问题。
| 特性 | Series | DataFrame |
|---|---|---|
| 维度 | 一维 | 二维 |
| 类比 | 带标签的数组 | 带标签的表格 |
| 索引 | 必须有索引 | 行索引 + 列名 |
| 金融应用 | 单只股票价格序列 | 多只股票多指标数据表 |
Series是Pandas的 一维数据结构,可以理解为「带标签的数组」。
Series 1 (从列表创建):
0 10
1 20
2 30
3 40
4 50
dtype: int64
DataFrame是Pandas的 二维数据结构,类似于Excel表格。
DataFrame内容:
股票代码 股票名称 股价 涨跌幅
0 600519.SH 贵州茅台 1850.0 0.05
1 000858.SZ 五粮液 220.5 -0.02
2 600036.SH 招商银行 45.2 0.03
DataFrame形状: (3, 4)
列名列表: ['股票代码', '股票名称', '股价', '涨跌幅']
shape 返回 (行数, 列数)columns 获取所有列名从NumPy数组创建的DataFrame:
特征1 特征2 特征3
样本1 1.369279 -0.989185 -0.067489
样本2 1.677549 0.261916 0.092575
样本3 1.863371 -0.487577 -0.575480
样本4 0.241499 -1.292895 -0.693391
样本5 0.375821 -1.242137 -2.128796
columns 和 index 参数添加有意义的标签从列表的列表创建的DataFrame:
名称 价格 涨跌幅
0 贵州茅台 1850.0 0.05
1 五粮液 220.5 -0.02
2 招商银行 45.2 0.03
带日期索引的DataFrame:
价格 销量
2024-01-01 10 100
2024-01-02 20 200
2024-01-03 30 150
2024-01-04 40 300
2024-01-05 50 250
pd.date_range() 生成日期序列set_index() 将日期设置为行索引设置日期索引后,可以更方便地进行时间序列操作:
df.loc['2024-01-01']:获取特定日期的数据df.loc['2024-01-01':'2024-01-03']:获取日期范围内的数据比使用整数位置(iloc)更直观、更不容易出错。
| 创建方式 | 适用场景 |
|---|---|
| 列表 → Series | 简单一维数值数据 |
| 字典 → Series | 有标签的键值对数据 |
| 字典 → DataFrame | 列数据组织形式 |
| 数组 → DataFrame | 科学计算/建模结果 |
| 嵌套列表 → DataFrame | CSV/API获取的行数据 |
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
#任务一
import numpy as np
import pandas as pd # 导入Pandas数据分析库
value_guotai = np.array([1.5284,1.4596,1.3745,1.4034,1.3935,1.39,1.412,1.4164]) #国泰金鑫股票基金2024年8月1日至8日净值数据的数组
date = np.array(["2024-08-01","2024-08-02","2024-08-05","2024-08-06","2024-08-07","2024-08-08","2024-08-09","2024-08-12"]) #交易日数组
series_guotai = pd.Series(data=value_guotai,index=date) #创建序列
print(type(series_guotai)) #查看变量的数据结构
data=[1.4596,1.001,0.897,2.051,1.7385];index=["国泰金鑫","中海医疗","华夏优势","富国城镇","上投摩根"] #创建8月2日基金净值的数组
value_0403 = pd.Series(data,index) # 创建Series序列value_0403
print(type(value_0403)) # 输出数据类型
#任务二
import numpy as np
import pandas as pd # 导入Pandas数据分析库
date = np.array(["2024-08-01","2024-08-02","2024-08-05","2024-08-06","2024-08-07","2024-08-08","2024-08-09","2024-08-12"]) #交易日数组
name = np.array(["国泰金鑫","中海医疗","华夏优势","富国城镇","上投摩根"]) #基金名称的数组并且用基金简称
data_3fund_array = np.array([[1.01,0.8918,2.038],[0.995,0.8833,2.025],[1.002,0.8735,2.032]]) #3只基金在2024年8月8日至12日净值的数组
data_3fund = pd.DataFrame(data=data_3fund_array,index=date[5:],columns=name[1:4]) #转成一个数据框
print(type(data_3fund)) # 输出数据类型
#任务三
import numpy as np
import pandas as pd # 导入Pandas数据分析库
date = np.array(["2024-08-01","2024-08-02","2024-08-05","2024-08-06","2024-08-07","2024-08-08","2024-08-09","2024-08-12"]) #交易日数组
name = np.array(["国泰金鑫","中海医疗","华夏优势","富国城镇","上投摩根"]) # 创建NumPy数组name
# 创建NumPy数组value_total
value_total = np.array([[1.5284,0.991,0.9122,2.069,1.7742],[1.4596,1.001,0.897,2.051,1.7385],[1.3745,1,0.8786,2.023,1.6843],[1.4034,1.013,0.8944,2.027,1.6917],
[1.3935,1.007,0.8944,2.031,1.6957],[1.39,1.01,0.8918,2.038,1.6955],[1.412,0.995,0.8833,2.025,1.6938],[1.6938,1.002,0.8735,2.032,1.6899]]) #创建数组
data_total = pd.DataFrame(data=value_total,index=date,columns=name) #转为数据框
print(data_total) # 输出数据数据
#任务四
import numpy as np
import pandas as pd # 导入Pandas数据分析库
value_guotai = np.array([1.5284,1.4596,1.3745,1.4034,1.3935,1.39,1.412,1.4164]) #国泰金鑫股票基金2024年8月1日至8日净值数据的数组
date = np.array(["2024-08-01","2024-08-02","2024-08-05","2024-08-06","2024-08-07","2024-08-08","2024-08-09","2024-08-12"]) #交易日数组
series_guotai = pd.Series(data=value_guotai,index=date) # 创建Series序列series_guotai
data=[1.4596,1.001,0.897,2.051,1.7385];index=["国泰金鑫","中海医疗","华夏优势","富国城镇","上投摩根"] #创建8月2日基金净值的数组
value_0403 = pd.Series(data,index) # 创建Series序列value_0403
name = np.array(["国泰金鑫","中海医疗","华夏优势","富国城镇","上投摩根"]) #基金名称的数组并且用基金简称
data_3fund_array = np.array([[1.01,0.8918,2.038],[0.995,0.8833,2.025],[1.002,0.8735,2.032]])#3只基金在2024年8月8日至12日净值的数组
data_3fund = pd.DataFrame(data=data_3fund_array,index=date[5:],columns=name[1:4]) # 创建数据框data_3fund
list_guotai = list(series_guotai)#国泰金鑫8与1日到12日净值数据的序列转为列表
array_0403 = np.array(value_0403) #8月2日5只基金净值的序列转为数组
array_3fund = data_3fund.values #8月8日到12日3只基金净值的数据框变为数组
print(array_3fund) # 输出基金数据<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>
国泰金鑫 中海医疗 华夏优势 富国城镇 上投摩根
2024-08-01 1.5284 0.991 0.9122 2.069 1.7742
2024-08-02 1.4596 1.001 0.8970 2.051 1.7385
2024-08-05 1.3745 1.000 0.8786 2.023 1.6843
2024-08-06 1.4034 1.013 0.8944 2.027 1.6917
2024-08-07 1.3935 1.007 0.8944 2.031 1.6957
2024-08-08 1.3900 1.010 0.8918 2.038 1.6955
2024-08-09 1.4120 0.995 0.8833 2.025 1.6938
2024-08-12 1.6938 1.002 0.8735 2.032 1.6899
[[1.01 0.8918 2.038 ]
[0.995 0.8833 2.025 ]
[1.002 0.8735 2.032 ]]
[商业大数据分析与应用]